package com.mapbar.mongodb;

import java.net.UnknownHostException;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBAddress;
import com.mongodb.Mongo;
import com.mongodb.WriteConcern;

public class DBTester {
	public static void main(String[] args) throws UnknownHostException {
		DB db = Mongo.connect(new DBAddress("192.168.51.114", 20000, "dbtest"));

		// 一般的操作都会返回WriteResult 可以获得指定操作的执行结果 需要注意的是 一个操作对应一个执行结果 连续进行两个操作的话 上一个操作的执行结果将失效 并且无法调用
		db.addUser("root", new char[] { '4', '8', '4', '5', '8', '4', '9' }, false);// 向指定数据库添加一个用户 并且指定其是只读用户还是操作用户
		db.cleanCursors(true);// 清理游标 可以选择是否强制
		db.createCollection("blog", new BasicDBObject());// 创建集合 如果options参数为空 则延迟到对集合进行操作时创建集合 该方法返回一个集合 如果集合已经存在则报错

		System.err.println(db.authenticate("tom", new char[] { '4', '8', '4', '5', '8', '4', '9' }));// 验证指定用户是否合法(两种验证方式同时只能存在一个)
		System.err.println(db.authenticateCommand("root", new char[] { '4', '8', '4', '5', '8', '4', '9' })); // 验证指定用户是否合法(返回命令执行结果)
		System.err.println(db.collectionExists("blog"));// 验证指定的集合是否存在
		System.err.println(db.doEval("function(x,y){return x + y;}", 1, 2));// 在服务端运行指定的命令(JS脚本)
		System.err.println(db.getName());// 获得数据库名称
		System.err.println(db.getOptions());// 获得查询选项(我他妈感觉可能是排序顺序 他妈的..)
		System.err.println(db.getCollection("blog"));// 获取指定集合
		System.err.println(db.getCollectionNames());
		System.err.println(db.getLastError());// 获取最后一次针对DB操作的执行结果
		System.err.println(db.getLastError(WriteConcern.NORMAL));// 获取最后一次针对集合操作的执行结果(指定错误级别)
		System.err.println(db.getMongo());// 获取创建当前对象的Mongo对象
		System.err.println(db.getPreviousError());// 返回建立连接后第一次操作的执行结果
		System.err.println(db.getReadPreference());// 获取默认阅读偏好
		System.err.println(db.getSisterDB("admin"));// 获取在同一个服务下的其他数据库
		System.err.println(db.getStats());// 数据库状态
		System.err.println(db.getWriteConcern());// 获取默认的错误级别
		System.err.println(db.isAuthenticated());// 指定的数据库是否是被保护的
		System.err.println(db.removeUser("root"));// 删除指定的用户
		
		System.err.println(db.command("count"));// 类似使用db.$cmd 执行命令(对应数据库的命令)
		System.err.println(db.command(new BasicDBObject("drop", "blog")));// 同上 只不过这个可以提供参数

		db.dropDatabase();// 删除掉当前数据库
	}
}
